package gui;

import queixa.Queixa;
import queixa.QueixaAlimentar;
import queixa.QueixaAnimal;
import queixa.QueixaDiversa;
import excecoes.ObjetoInexistenteException;
import excecoes.ObjetoInvalidoException;
import excecoes.ObjetoJaExistenteException;
import excecoes.RepositorioException;
import excecoes.SituacaoException;
import fachada.Fachada;
import guiasaude.Especialidade;
import guiasaude.Hospital;
import guiasaude.PostoSaude;
import guiasaude.UnidadeSaude;
import guiasaude.reps.IRepositorioUnidadeSaude;
import guiasaude.reps.RepositorioEspecialidadeArray;

public class Main {

	/**
	 * Metodo principal Testa as funcionalidades do sistema
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		String tipoRep = "Lista";
//		if ((args != null) && (args.length > 0)) {
//			tipoRep = args[0];
//		}
		
		// inicializacao do sistema
		Fachada f = new Fachada(tipoRep);

		//
		Especialidade cli = new Especialidade("Clinica Geral");
		Especialidade oft = new Especialidade("Oftalmologia");
		Especialidade cir = new Especialidade("Cirurgia");

		try {
			f.incluirEspecialidade(cli);
			f.incluirEspecialidade(oft);
			f.incluirEspecialidade(cir);

			UnidadeSaude u1 = new Hospital("Sao Joao", 10, 500);
			u1.adicionarEspecialidade(cli);
			u1.adicionarEspecialidade(cir);
			UnidadeSaude u2 = new Hospital("Geral", 50, 120);
			u2.adicionarEspecialidade(cli);
			u2.adicionarEspecialidade(oft);
			UnidadeSaude u3 = new PostoSaude("Varzea Grande", 2, 200);
			u3.adicionarEspecialidade(cli);
			UnidadeSaude u4 = new PostoSaude("Torre", 4, 130);
			u4.adicionarEspecialidade(cli);

			f.incluirUnidadeSaude(u1);
			f.incluirUnidadeSaude(u2);
			f.incluirUnidadeSaude(u3);
			f.incluirUnidadeSaude(u4);

			System.out
					.println("\nUnidades de Saude e suas especialidades foram inseridas com sucesso!\n");

			aberturaQueixas(f);
			pesquisasUnidades(f);
			fechamentoQueixas(f);
			pesquisasPrefeitura(f);

		} catch (RepositorioException e) {
			System.out.println(e.getMessage());
		} catch (ObjetoJaExistenteException e) {
			System.out.println(e.getMessage());
		} catch (ObjetoInvalidoException e) {
			System.out.println(e.getMessage());
		} catch (SituacaoException e) {
			System.out.println(e.getMessage());
		} catch (ObjetoInexistenteException e) {
			System.out.println(e.getMessage());
		}
	}

	private static void fechamentoQueixas(Fachada f)
			throws RepositorioException, ObjetoInexistenteException,
			ObjetoInvalidoException, SituacaoException {

		Queixa queixa1 = f.consultarQueixa(1);
		f.fecharQueixa(queixa1,
				"Coxinha nao estava estragada, eu mesmo provei!");

		Queixa queixa3 = f.consultarQueixa(3);
		f.fecharQueixa(queixa3, "Cavalo jah preso!");

	}

	private static void pesquisasPrefeitura(Fachada f) {

		System.out.println("\nTaxa de medico por paciente-dia nas unidades");
		IRepositorioUnidadeSaude unidades = f.getUnidades();
		for (int i = 0; i < unidades.size(); i++) {
			UnidadeSaude un = unidades.getElemento(i);
			System.out.println("\nUnidade " + un.getDescricao());
			System.out.print("= " + f.calcularMediaMedicoPacienteDia(un));
		}

		System.out
				.println("\n\nServico de queixas da prefeitura tah bom ou nao?");
		int situacao = f.consultaSituacaoQueixas();
		String msg = "";
		switch (situacao) {
		case Queixa.OTIMO:
			msg = "Otimo!";
			break;
		case Queixa.REGULAR:
			msg = "Regular";
			break;
		case Queixa.RUIM:
			msg = "Ruim!";
			break;
		}
		System.out.println("Servico: " + msg);
	}

	private static void pesquisasUnidades(Fachada f)
			throws ObjetoInexistenteException, RepositorioException {

		IRepositorioUnidadeSaude unidades = f.getUnidades();
		System.out
				.println("\nUnidades de Saude do Municipio e suas Especialidades");

		for (int i = 0; i < unidades.size(); i++) {
			UnidadeSaude u = unidades.getElemento(i);
			RepositorioEspecialidadeArray rep = f
					.consultaEspecialidadeporUnidadeSaude(u.getCodigo());
			System.out.println("Unidade de Saude " + u.getDescricao());
			for (int j = 0; j < rep.size(); j++) {
				System.out.println("\t Especialidade: "
						+ rep.getElemento(j).getDescricao());
			}
		}
	}

	private static void aberturaQueixas(Fachada f) throws RepositorioException,
			ObjetoJaExistenteException, ObjetoInvalidoException,
			SituacaoException {
		QueixaAlimentar queixaAlimentar1 = new QueixaAlimentar(
				"Passei mal com uma coxinha", Queixa.ABERTA, "Jose Silva",
				"jose@gmail.com", "rua dos tolos", "PE", "Recife", 3, 1,
				"Cantina da Nona");
		QueixaAlimentar queixaAlimentar2 = new QueixaAlimentar(
				"Bacalhau estragado, passamos mal!", Queixa.ABERTA,
				"Ailton Sousa", "ailton@gmail.com", "rua dos bobos", "PB",
				"Joao Pessoa", 10, 3, "Mercado de Peixe");
		QueixaAnimal queixaAnimal1 = new QueixaAnimal(
				"Tem um cavalo solto passeando", Queixa.ABERTA, "Jose Silva",
				"jose@gmail.com", "rua dos tolos", "PE", "Recife", 1, "Cavalo",
				"rua dos tolos", "PE", "Recife");
		QueixaAnimal queixaAnimal2 = new QueixaAnimal(
				"3 pitbulls estao rondando o bairro", Queixa.ABERTA,
				"Ailton Sousa", "ailton@gmail.com", "rua dos bobos", "PB",
				"Joao Pessoa", 3, "cachorros", "rua dos bobos", "PB",
				"Joao Pessoa");
		QueixaDiversa queixaDiversa1 = new QueixaDiversa(
				"Nossa rua estah muito suja", Queixa.ABERTA, "Jose Silva",
				"jose@gmail.com", "rua dos tolos", "PE", "Recife",
				"rua dos tolos", "PE", "Recife");
		QueixaDiversa queixaDiversa2 = new QueixaDiversa(
				"iluminacao horrivel, muitos assaltos", Queixa.ABERTA,
				"Ailton Sousa", "ailton@gmail.com", "rua dos bobos", "PB",
				"Joao Pessoa", "rua dos bobos", "PB", "Joao Pessoa");

		System.out.println("Queixa registrada num: "
				+ f.abrirQueixa(queixaAlimentar1));
		System.out.println("Queixa registrada num: "
				+ f.abrirQueixa(queixaAlimentar2));
		System.out.println("Queixa registrada num: "
				+ f.abrirQueixa(queixaAnimal1));
		System.out.println("Queixa registrada num: "
				+ f.abrirQueixa(queixaAnimal2));
		System.out.println("Queixa registrada num: "
				+ f.abrirQueixa(queixaDiversa1));
		System.out.println("Queixa registrada num: "
				+ f.abrirQueixa(queixaDiversa2) + "\n");

	}

}
